// Function.prototype.myBind = function (ctx) {
//     console.log('ctx--------');
//     console.log(ctx);
// // 保存原函数的 this 至 _this
//     var _this = this
// // slice 使用了两次，保存到变量中
// // slice 主要用于类数组对象 arguments 的浅复制
//     var slice = Array.prototype.slice;
// // 传给 bind() 函数的第二个至之后的参数，从  arguments 的第二位开始
//
//     var formerArgs = slice.call(arguments, 1);
//     console.log('formerArgs----11111----');
//     console.log(formerArgs);
// // bind() 本身就是一个函数，返回
//     return function (){
//
// // 传给原函数的参数
//         let laterArgs = slice.call(arguments, 0);
//         console.log('laterArgs---2222-----');
//         console.log(laterArgs);
// // 返回一个函数，这个函数调用了原函数，并且 this 指向 bind 的第一个参数，
// // 第二个参数由 formerArgs  与 laterArgs组成
//         return _this.apply(ctx, formerArgs.concat(laterArgs))
//     }
// };
// Function.prototype.bind=function(ctx){
//     var _this=this;
//     var slice=Array.prototype.slice;
//     var formerArgs=slice(arguments,1);
//     return function () {
//         return _this.apply(ctx,formerArgs.concat(slice.call(arguments,0)))
//     }
// }
Function.prototype.bin6ES6 = function(ctx,...formerArgs){
    let _this=this;
    console.log('formerArgs----11111----');
    console.log(formerArgs);
    return  (...laterArgs)=> {
        console.log('laterArgs----11111----');
        console.log(laterArgs);
        return _this.apply(ctx,formerArgs.concat(laterArgs))
    }
}
function fn(a, b, c) {
    return a + b + c;
}

var _fn = fn.bin6ES6(null,10);
var ans = _fn(20, 30); // 60


